class Solution {
public:
    int findMaxLength(vector<int>& nums) 
    {
        //使用哈希表解决，使用一个index标记变量，当遇到0的时候让index-1，当遇到1的时候就让index+1，然后使用map记录每一个
        //下标时index的值，当遍历的时候，遇到当前下标下index的值在之前出现过，那么这两个下标之间的数组就是0和1出现次数
        //相同的一组
        int index = 0;
        int ret = 0;
        unordered_map<int,int> hash = {{0,-1}};
        // 这是为了辅助讨论该连续数组的起始点在 index == 0 的位置的情况，如果最长连续数组在数组的最前方，
        // 不插入{0,-1}会得到错误的答案，因此我们一定要插入该辅助键值！
        for(int i = 0;i<nums.size();i++)
        {
            nums[i] == 0?--index:++index;
            if(hash.count(index))
            {
                ret = max(ret,i-hash[index]);
            }
            else
                hash[index] = i;
        }
        return ret;
    }
};